library(tidyverse)
library(lubridate)
library(glue)
library(here)
library(ggtext)
library(patchwork)
library(kableExtra)
library(hrbrthemes)
library(tidytext)
set.seed(1014)

knitr::knit_hooks$set(inline = function(x) prettyNum(x, big.mark = ".", decimal.mark = ","))

options(
  digits = 1,
  scipen = 999,
  OutDec = ",",
  knitr.kable.NA = "",
  radian.auto_match = FALSE
)

Sys.setenv(LANGUAGE = "pt-br")
Sys.setlocale("LC_TIME", "pt_BR")
#> [1] ""

# helper
`%notin%` <- function(x, y) !(x %in% y)
# aplica identidade visual da TB/AeP:
cores_aep <- c(
  laranja = "#F9A521",
  rosa = "#D81755",
  cinza = "#969696",
  marrom = "#B27D5C"
)

cores_tb <- c(
  laranja = "#F6A323",
  cinza_escuro = "#1d1d1b",
  cinza_claro = "#6f7171",
  cinza_quase_branco = "#ececec",
  azul = "#41ACBD"
)

cores_decisao <- c(
  "Acesso Concedido" = cores_tb[["azul"]],
  "Não se trata de solicitação de informação" = cores_aep[["marrom"]],
  "Acesso Negado" = cores_aep[["rosa"]],
  "Acesso Parcialmente Concedido" = cores_aep[["laranja"]],
  "Pergunta Duplicada/Repetida" = cores_aep[["cinza"]],
  "Órgão não tem competência para responder sobre o assunto" = cores_tb[["cinza_escuro"]],
  "Informação Inexistente" = cores_tb[["cinza_quase_branco"]]
  )

cores_decisao2 <- cores_decisao
cores_decisao2[["Informação Inexistente"]] <- "gray20"

cores_decisao3 <- c("black", "gray90", "gray20", "gray80", "gray20")
names(cores_decisao3) <- names(cores_decisao)[-c(5, 2)] 

cores_lai <- tibble(
  c1 = c("Não se trata de solicitação de informação",
         "Pergunta Duplicada/Repetida",
         "Pedidos de acesso a informação via LAI"
         ) %>% str_wrap(25),
  c2 = c("#F9A521", "#969696", "#D81755")
) %>% deframe()

Análises de pedidos de acesso a informação via LAI considerando a decisão de acesso.

periodo_final <- "2021-08-01"
instancias_recursais <- c(
  "Primeira Instância",
  "Segunda Instância",
  "Terceira Instância",
  "CGU",
  "CMRI",
  "Pedido de Revisão",
  "Não houve recurso"
)

pedidos_cgu <- readRDS(here("dados/load/rds/pedidos-clean.rds")) %>%
  filter(data_resposta <= periodo_final, data_resposta <= periodo_final) %>% 
  rename(orgao = orgaodestinatario)
orgaos_count_decisao <- pedidos_cgu %>%
  rename(orgao = orgao) %>%
  select(id_pedido, data_resposta, decisao, orgao) %>%
  add_count(data_resposta, name = "n_mes") %>%
  add_count(data_resposta, orgao, name = "n_mes_orgao") %>%
  add_count(data_resposta, decisao, name = "n_mes_decisao") %>%
  add_count(data_resposta, decisao, orgao, name = "n_mes_decisao_orgao")

orgaos <- orgaos_count_decisao %>%
  # filter(decisao == "Acesso Negado") %>%
  select(-id_pedido) %>%
  distinct() %>%
  mutate(taxa_relativa = n_mes_decisao_orgao / n_mes_decisao) %>%
  group_by(orgao) %>%
  mutate(taxa_media_orgao = mean(taxa_relativa)) %>%
  ungroup() %>%
  arrange(-taxa_media_orgao, data_resposta) %>%
  group_by(orgao, taxa_media_orgao) %>%
  nest() %>%
  ungroup() %>%
  mutate(ord = 1:n()) %>%
  unnest(cols = everything())

top_20 <- orgaos %>% filter(ord < 21)
my_lbl <- function(x) scales::percent(x, accuracy = .1, decimal.mark = ",")

decisao_rect <- tibble(
  xmin = ymd("2015-01-01"),
  xmax = ymd("2021-07-01"),
  ymin = -Inf,
  ymax = Inf,
  decisao = unique(pedidos_cgu$decisao)
)

my_plot <- function(x) {
  orgaos %>%
    filter(decisao %notin% c(
      "Pergunta Duplicada/Repetida",
      "Não se trata de solicitação de informação"
    )) %>%
    # filter(str_detect(orgao, "Palmares") |
    #          str_detect(orgao, "Relações Exteriore") |
    #          str_detect(orgao, "^CEF ") |
    #          str_detect(orgao, "^ME ") |
    #          str_detect(orgao, "^GSI-PR ")) %>%
    filter(decisao == x) %>%
    ggplot(aes(
      # y = reorder(orgao, taxa_media_orgao),
      y = taxa_relativa,
      x = data_resposta
    )) +
    geom_rect(
      data = decisao_rect %>% filter(decisao == x),
      aes(
        xmin = xmin,
        xmax = xmax,
        ymin = ymin,
        ymax = ymax,
        fill = decisao
      ),
      alpha = .2,
      show.legend = F,
      inherit.aes = F
    ) +
    geom_line(show.legend = F, size = .7) +
    geom_vline(xintercept = seq(ymd("2015-01-01"), ymd("2021-01-01"), by = "year"), lty = 3) +
    geom_text(
      data = tibble(data_resposta = seq(ymd("2015-02-01"), ymd("2021-02-01"), by = "year")),
      aes(label = year(data_resposta), y = -.005),
      size = 3,
      vjust = .1,
      hjust = .25,
      color = "gray20"
    ) +
    ggrepel::geom_label_repel(
      data = . %>%
        group_by(decisao, year(data_resposta), orgao) %>%
        arrange(year(data_resposta), decisao, -taxa_relativa) %>%
        filter(row_number() == 1) %>%
        ungroup(),
      aes(label = my_lbl(taxa_relativa), fill = decisao, color = decisao),
      min.segment.length = 0.5,
      size = 3.2,
      label.padding = unit(0.15, "lines"),
      label.size = NA,
      show.legend = F,
      direction = "y"
    ) +
    geom_point(
      data = . %>%
        group_by(decisao, year(data_resposta), orgao) %>%
        arrange(year(data_resposta), decisao, -taxa_relativa) %>%
        filter(row_number() == 1) %>%
        ungroup()
    ) +
    scale_fill_manual(values = cores_decisao) +
    scale_color_manual(values = cores_decisao3) +
    scale_y_percent(expand = c(0.2, 0)) +
    scale_x_date(
      limits = c(ymd("2015-01-01"), ymd("2021-07-01")),
      breaks = scales::date_breaks("3 months"),
      date_labels = "%b",
      expand = c(0, 0)
    ) +
    theme_minimal() +
    theme(
      legend.position = "top",
      axis.ticks.x = element_line(),
      legend.text = element_text(size = 8),
      axis.text.x = element_text(size = 10, vjust = 2.5, hjust = .5),
      panel.grid.minor = element_blank(),
      strip.text = element_text(size = 12, angle = 0, hjust = 0)
    ) +
    labs(
      x = NULL,
      y = NULL,
      title = "Negativas de acesso a informação por órgão do executivo Federal",
      subtitle = "Ccomo % do total de decisões de acessos negados total no FalaBr",
      color = NULL,
      fill = NULL
    ) +
    facet_wrap(. ~ reorder(orgao, -n_mes, sum), scales = "free", ncol = 1)
}

my_plot("Acesso Negado")